【セッションレポート】Cloud Runを知り尽くすDeep Dive! #cm_odyssey
はじめに
クラスメソッドは会社設立20周年のイベントとしてClassmethod Odysseyを 1 ヶ月間にわたって開催しています。
7/9(火)Classmethod Odyssey ONLINE クラウド編にて諏訪悠紀さん(グーグル・クラウド・ジャパン合同会社)が登壇されたセッション【Cloud Runを知り尽くすDeep Dive!】のレポートを本記事ではお伝えします。スピーカー
諏訪 悠紀(Yuki Suwa)
グーグル・クラウド・ジャパン合同会社 カスタマーエンジニア
クラスメソッド株式会社に2011年-2020年の間在籍
諏訪さんのZennの記事
諏訪さんのクラスメソッド時代の記事
諏訪さんの2023年12月の一人Cloud Runアドベントカレンダー
セッション概要
Google Cloud のサーバーレス コンテナ サービスである「Cloud Run」はアップデートを重ね、さまざまなユースケースで使えるようかなり便利になってきました。このセッションでは、Cloud Run の基本を踏まえながら、各機能の詳細をデモも混じえながら Deep Dive します。Cloud Run を使いこなしたい方、ぜひご覧ください!
Cloud Runとは
- Google Cloud のサーバレスランタイム
- コンテナアプリケーションを素早くセキュアにデプロイできる
- 準備はほぼ不要、コンテナアプリケーションがあればすぐに使える
- 高い自由度、どんなコンテナでもデプロイできる
- 実行に際して事前の準備不要
- インフラ管理不要
- コスト効率的、従量課金、無料枠も豊富にある(料金表)
- Cloud RunにはCloud RunサービスとCloud Run ジョブがある
- Cloud RunサービスはHTTPエンドポイントを持つサービスをホスティング
- Cloud Runジョブはタスクを非同期で実行、バッチジョブとして使える
- ユースケース
- Webアプリ(SSR、API、Web Socket)
- 内部向けWebサイト
- データ処理(メッセージキュー処理、イベントドリブンアーキテクチャ)
Cloud Runのデモ
※Cloud Runのデモでは、数クリックで数十秒以内にアプリケーションをデプロイできることが示されました。
Cloud Runの歴史
- Borg
- Googleでコンテナによるアプリケーションを管理するソフトウェア
- コンテナオーケストレーションソフトウェア
- GoogleのほとんどのサービスはBorg上で稼働
- 0 to Nに高速にスケール
- OSSとして公開したのがKubernetes
- BigQueryでもBorgが使用されている
- Knative
- Kubernetesの中でサーバレスアプリケーションをデプロイ・実行・管理するためのコンポーネント
- Cloud RunではKnative互換のAPIを提供
- ポータビリティ
- gVisorとmicroVM
- 安全にコンテナを動作させるための仕組み
- ホストOSとアプリケーションレイヤを分離する
- Cloud Run第1世代:gVisor上で動作。軽量なアプリケーションを高速にスケール
- Cloud Run第2世代:microVM上で動作。ハイパフォーマンスでさまざまなユースケースに適している
- 第1世代<第2世代というわけではない。コンテナの軽量さを維持しながら高速にデプロイする場合はgVisorが優れている。ユースケースによって切り替えて使う※Cloud Run実行環境について
基本機能ハイライト
- リビジョン
- バージョンのようなリソース
- コンテナイメージに1:1で作られる。デプロイの度に作成される
- コンテナインスタンス
- どのリビジョンでリクエストを処理するか設定できる
- リクエストに応じてスケール
- コンカレンシー
- 一般的なFaaSとは異なりCloud Runは1インスタンスで複数のリクエストを処理することができる
- 1インスタンスで最大1000リクエストまで処理できる
- コンカレンシー数を増やすことで費用を低減することができる
- オートスケーリング
- リクエスト数に応じて自動でスケーリング
- リクエストが一切ない場合はインスタンス数が0になる
- 最小インスタンス数を設定することも可能
- トラフィック分割時に最小インスタンスをリビジョンごとに設定可能(Preview機能)
- 0 to Nのオートスケーリング
- 想定可能トラフィックは暖機運転で捌くことができる
- 高速に立ち上がるアプリケーションを作成できれば0 to Nにオートスケールが可能
- Startup CPU Boost
- コンテナ起動時に一時的にCPU割り当てを増加
- 料金
- 従量課金
- 無料枠、確約利用割引あり
- 2種類のCPU Allocation
- HTTPリクエスト受信時のみCPUを割り当てるか常時割り当てるか選択できる
- HTTPリクエスト受信時のみ→時間に応じた課金
- 常にCPUを割り当て→コンテナインスタンスが存在している時間に応じた課金
- 確約利用割引
- 年間で利用を確約(コミット)することで割引
デプロイ
- デプロイの基本パターン
- gcloud run deployコマンドでデプロイ
- Google Cloud コンソールからGUIでデプロイ
- CI/CDサービス利用
- gcloud run deployコマンドの動作
- ソースコードがCloud Storageにアップロード
- Cloud BuildがCloud Storageからソースコードを取得しコンテナイメージをビルド
- Artifact Registryにコンテナイメージが保存される
- Cloud Runへコンテナがデプロイされる
- リビジョンごとにトラフィック分割可能
- リビジョンごとにユニークなURLでアクセスできる
- Cloud Deployを用いたデプロイフローの管理もできる
よく使う機能
- マルチコンテナ(Sidecar サイドカー)
- 1つのサービスで複数コンテナを共存できる
- 役割ごとにコンテナを設定することができる
- VPC内リソースへの接続
- Direct VPC Egress
- Cloud RunをVPCに直接接続できる
- 多くのIPが必要
- Serveless VPC Access Connector
- GCEが仲介
- Direct VPC Egressより少ないIPで利用可能
- Direct VPC Egress
- 負荷分散、ルーティング、CDN、WAF
- Application Load BalancerのオプションとしてCDNやWAFを利用可能
- シンプルな構成で実現できる
- Identity-Aware Proxy
- Cloud Runの手前に認証プロキシレイヤーを挟むことができる
- Cloud RunのURLにアクセスするとGoogle アカウントの認証を求められる、というような設定も可能
- サーバ/クライアント間の長時間接続、ストリーミング
- gRPC、Web Socket、HTTP/1.1 Chunked transfer encodingなどをサポート
- セッションアフィニティ機能
Cloud Run ジョブ
- バッチジョブやデータ処理などのワークロードをCloud Runで実行
- 第2世代の実行環境のみ利用可能
- スクリプトの定期実行、バックグラウンド処理、バッチ処理などのユースケースに向いている
- 並列処理
- 並列数 = Taskの同時実行数
- 複数のTaskを定義して並列に高速で処理することもできる
- 1つのTaskを直列実行、複数のTaskを直列実行、複数のTask並列実行というような実行パターンがある
- 可能な設定
- 並列数の制限
- タイムアウトの設定
- 自動リトライ
- ジョブ実行時の設定値や環境変数の上書き実行(オーバーライド)
最新アップデート
- Cloud Run for LangChain
- LangChainのデプロイ・ホスティング先にCloud Runを使用できる
- Codelabsも公開中
- App Hosting連携
- Firebase Hostingに加えてSSRを簡単にホスティングする機能を提供
- SSRに必要なGoogle Cloud のコンポーネントを自動でプロビジョニング
- マルチリージョンロードバランシング (Private Preview)
- コマンドひとつでマルチリージョンロードバランシング環境を作成できる
- 複数のリージョンで負荷分散、DR
- Application Canvas (Roadmap)
- 自然言語からアーキテクチャを生成できる
- GUI ベースで Cloud Runを中心としたアーキテクチャを組むことができる
- Cloud Run Integrationsの機能に加え自然言語からアーキテクチャ作成、デプロイまでできる
- Cloud Service Mesh (Roadmap)
- Next-gen Anthos Service Mesh + Traffic Director
- トラフィック管理、おブザーバビリティ、セキュリティ強化が可能
- GKEと組み合わせたサービスメッシュの構築
Google Cloud Next Tokyo
2024/8/1(木) - 8/2(金) パシフィコ横浜ノースにて開催されるGoogle Cloud Next Tokyoの【Day1 基調講演】とセッション【生成 AI で作る商品カタログと、Google の検索技術で作る商品検索サービス】に本スピーカーの諏訪氏が登壇予定。
Google Cloud Next Tokyoへの参加登録はこちらから↓↓
感想
Cloud Runジョブを普段から利用している者として、今回のセッションは非常に参考になり、また興味深く感じました。基本的な機能について満遍なく触れられた上で、要所を押さえたディープダイブがあり、聴衆を飽きさせることなくCloud Runの魅力を余すことなく伝えてくれました。
特に、Cloud Runの歴史を知ることで、このサービスがいかにして高性能で信頼性の高いものになっているのかがよく分かり、またGoogleの技術力とその進化の過程に感動しました。また、今後のアップデート内容についても触れられ、Cloud Run for LangChainやApp Hosting連携など、Cloud Runのさらなる可能性にワクワクしました。
満遍なくCloud Runの機能を知ることができたおかげで、まだまだ使いこなせていない機能が多いことを再認識しました。これらの機能を活用すれば、より冗長性・可用性の高いアプリケーションを構築できると感じています。今回のセッションで得た知識を活かし、より高度なCloud Runを用いたアプリケーション開発と運用を目指していきたいと思います。諏訪さん、とても参考になるセッションをありがとうございました。